package service

import (
    "StarRocksBuckets/tools"
    "StarRocksBuckets/util"
    "fmt"
    "github.com/fatih/color"
    "strings"
)

type bucketStr struct {
    App          string `json:"app"`
    Best         int    `json:"best"`
    Buckets      string `json:"buckets"`
    Client       string `json:"client"`
    Conservative int    `json:"conservative"`
    Datasize     string `json:"datasize"`
    Msg          string `json:"msg"`
    Normal       bool   `json:"normal"`
    Table        string `json:"table"`
}

func Run() {
    //ScanSchemaGetPartitionRange(util.Table)

    if len(util.StarRocks) != 0 && util.Buckets != 0 && len(util.Table) != 0 && !util.Auto {
        ScanSchemaSetBuckets(util.Table, util.Buckets)
        util.Logger.Info("done.")
        return
    }
    if len(util.StarRocks) != 0 && len(util.Table) != 0 && util.Auto {
        ScanSchemaAutoSetBuckets()
        util.Logger.Info("done.")
        return
    }

    schema := tools.Other()

    if len(util.StarRocks) != 0 && len(util.Table) != 0 {
        b := getbuckets(util.StarRocks, util.Table)
        c := color.New()
        fmt.Println("\nOptions:\nstarrocks buckets分桶体检1.0")
        fmt.Println()
        if b.Normal {
            fmt.Println(c.Add(color.FgHiGreen).Sprint("正常"))
            fmt.Println(fmt.Sprintf("集群: %s", c.Add(color.FgHiCyan).Sprint(b.App)))
            fmt.Println(fmt.Sprintf("表名: %s", c.Add(color.FgHiCyan).Sprint(b.Table)))
            fmt.Println(fmt.Sprintf("分桶: %s", c.Add(color.FgHiCyan).Sprint(b.Buckets)))
            fmt.Println(fmt.Sprintf("容量: %s", c.Add(color.FgHiCyan).Sprint(b.Datasize)))
            fmt.Println(fmt.Sprintf("类型: %s", c.Add(color.FgHiWhite).Sprint(schema.SchemaType)))
            fmt.Println(fmt.Sprintf("大小: %s", c.Add(color.FgHiGreen).Sprint(schema.Size)))
            fmt.Println(fmt.Sprintf("数量: %s", c.Add(color.FgHiMagenta).Sprint(schema.RowCount)))
            fmt.Println(fmt.Sprintf("时间: %s", c.Add(color.FgHiBlue).Sprint(schema.CreateTime)))
            fmt.Println(fmt.Sprintf("注释: %s", c.Add(color.FgHiYellow).Sprint(schema.Comment)))
        } else {
            fmt.Println(c.Add(color.FgHiYellow).Sprint("倾斜"))
            fmt.Println(fmt.Sprintf("集群: %s", c.Add(color.FgHiCyan).Sprint(b.App)))
            fmt.Println(fmt.Sprintf("表名: %s", c.Add(color.FgHiCyan).Sprint(b.Table)))
            fmt.Println(fmt.Sprintf("分桶: %s", c.Add(color.FgHiMagenta).Sprint(b.Buckets)))
            fmt.Println(fmt.Sprintf("容量: %s", c.Add(color.FgHiCyan).Sprint(b.Datasize)))
            fmt.Println(fmt.Sprintf("类型: %s", c.Add(color.FgHiWhite).Sprint(schema.SchemaType)))
            fmt.Println(fmt.Sprintf("保底: %s", c.Add(color.FgHiYellow).Sprint(b.Conservative)))
            fmt.Println(fmt.Sprintf("建议: %s", c.Add(color.FgHiGreen).Sprint(b.Best)))
            fmt.Println(fmt.Sprintf("大小: %s", c.Add(color.FgHiGreen).Sprint(schema.Size)))
            fmt.Println(fmt.Sprintf("数量: %s", c.Add(color.FgHiMagenta).Sprint(schema.RowCount)))
            fmt.Println(fmt.Sprintf("时间: %s", c.Add(color.FgHiBlue).Sprint(schema.CreateTime)))
            fmt.Println(fmt.Sprintf("注释: %s", c.Add(color.FgHiYellow).Sprint(schema.Comment)))
        }
        if schema.Sum >= 2 {
            fmt.Println(fmt.Sprintf("分区: 动态分区:%s,空分区:[%s],非空分区:[%s]", schema.Enable, schema.Nil, schema.Nos))
        }
        if schema.Mv != nil {
            fmt.Println(fmt.Sprintf("物化: %s", strings.Join(schema.Mv, ",")))
        }

        if util.List {
            ScanSchemaSortKey()
        }

        if util.TabletSize > 0 {
            fmt.Println()
            TabletRepSize(b.Datasize)
        }
        fmt.Println()
        Distribution(util.Table)
        fmt.Println()
        return
    }
}
